/**
 * 递归修改树结构：id→value，name→label
 * @param {Array} treeList - 原始树结构数组（顶层节点数组）
 * @returns {Array} 处理后的新树结构数组
 */
export function formatTreeForCascader(treeList) {
    // 边界判断：若输入不是数组或为空，直接返回空数组
    if (!Array.isArray(treeList) || treeList.length === 0) {
        return [];
    }

    // 遍历每个顶层节点，递归处理
    return treeList.map(node => {
        // 1. 处理当前节点：id→value，name→label，保留其他原有字段（如level、pinyin等）
        const formattedNode = {
            ...node, // 复制节点原有所有字段
            value: node.name, // id赋值给value
            label: node.name // name赋值给label
        };

        // 2. 递归处理子节点（若存在children）
        if (node.children && Array.isArray(node.children) && node.children.length > 0) {
            formattedNode.children = formatTreeForCascader(node.children); // 递归调用处理子树
        }

        // 3. 返回处理后的当前节点
        return formattedNode;
    });
}

/**
 * 非递归查找父级节点的子级
 * @param {Array} tree 省市区树结构数组
 * @param {string} parentCode 父级code
 * @returns {Array} 子级数组
 */
export function getChildrenByParentCodeNonRecursive(tree, parentName) {
    // 使用栈存储待遍历的节点
    const stack = [...tree];

    while (stack.length > 0) {
        // 弹出栈顶节点
        const node = stack.pop();

        // 找到目标父节点，返回子级
        if (node.name === parentName) {
            return node.children || [];
        }

        // 若有子节点，将子节点推入栈（继续遍历）
        if (node.children && node.children.length > 0) {
            stack.push(...node.children);
        }
    }

    // 未找到返回空数组
    return [];
}

// 导出
export function downloadFile(res) {
    // 从响应头或自定义逻辑获取文件名
    const fileName = getFileNameFromHeaders(res.headers);
    if (fileName) {
        // 创建 Blob 对象并生成下载链接
        const blob = new Blob([res.data], { type: res.headers['content-type'] });
        const downloadUrl = window.URL.createObjectURL(blob);

        // 动态创建 <a> 标签并触发点击
        const link = document.createElement('a');
        link.href = downloadUrl;
        link.setAttribute('download', fileName);
        document.body.appendChild(link);
        link.click();

        // 清理临时 URL 和 <a> 标签
        window.URL.revokeObjectURL(downloadUrl);
        document.body.removeChild(link);
    }
}

// 获取文件流名称
export function getFileNameFromHeaders(headers) {
    const disposition = headers['content-disposition'];
    if (disposition) {
      const match = disposition.match(/filename="?(.+?)"?(;|$)/);
      return match ? decodeURIComponent(match[1]) : null;
    }
    return null;
  }